911. Квадратное уравнение

 

Решите квадратное уравнение ax2 + bx + c = 0 (a ≠ 0).

 

Вход. В одной строке заданы три целых числа – коэффициенты квадратного уравнения a, b и c. Значения всех коэффициентов по модулю не превышают 100.

 

Выход. В одной строке выведите:

·        No roots, если уравнение не имеет корней;

·        One root: и через пробел сам корень, если уравнение имеет один корень;

·        Two roots: и через пробел сначала меньший, а потом больший корень, если уравнение имеет два корня.

Гарантируется, что в случае наличия решений все корни целочисленные.

 

Пример входа 1

Пример выхода 1

1 -5 6

Two roots: 2 3

 

 

Пример входа 2

Пример выхода 2

1 2 10

No roots

 

 

РЕШЕНИЕ

математика

 

Анализ алгоритма

В задаче следует решить квадратное уравнение по формуле

,

где d – дискриминант квадратного уравнения, равный b2 – 4ac.

 

В зависимости от знака дискриминанта возможны три случая:

·        d < 0, уравнение не имеет корней;

·        d = 0, уравнение имеет один корень;

·        d > 0: уравнение имеет два корня, которые следует вывести в порядке возрастания;

 

Реализация алгоритма

Поскольку коэффициенты уравнения и его корни (в случае их наличия) целочисленные, то все вычисления будем проводить в целых числах. Читаем входные данные.

 

scanf("%d %d %d", &a, &b, &c);

 

Вычисляем дискриминант квадратного уравнения.

 

d = b * b - 4 * a * c;

 

В зависимости от знака дискриминанта выводим ответ.

 

if (d < 0)

  printf("No roots\n");

else if (d == 0)

{

  x1 = -b / (2 * a);

  printf("One root: %d\n", x1);

}

else

{

  x1 = (-b - sqrt(1.0*d)) / (2 * a);

  x2 = (-b + sqrt(1.0*d)) / (2 * a);

  printf("Two roots: ");

  if (x1 < x2)

    printf("%d %d\n", x1, x2);

  else

    printf("%d %d\n", x2, x1);

}

 

Java реализация

 

import java.util.*;

 

public class Main

{

  public static void main(String []args)

  {

    Scanner con = new Scanner(System.in);

    int a = con.nextInt();

    int b = con.nextInt();

    int c = con.nextInt();

 

    int d = b * b - 4 * a * c;

    double x1 = (-b - Math.sqrt(1.0 * d)) / (2 * a);

    double x2 = (-b + Math.sqrt(1.0 * d)) / (2 * a);

 

    if (d == 0)

      System.out.printf("One root: %.0f\n", x1);

    else if (d < 0)

      System.out.printf("No roots\n");

    else if (x1 < x2)

      System.out.printf("Two roots: %.0f %.0f\n", x1, x2);

    else

      System.out.printf("Two roots: %.0f %.0f\n ", x2, x1);

 

    con.close();

  }

}

 

Python реализация

 

import math

 

Поскольку коэффициенты уравнения и его корни (в случае их наличия) целочисленные, то все вычисления будем проводить в целых числах. Читаем входные данные.

 

a, b, c = map(int, input().split())

 

Вычисляем дискриминант квадратного уравнения.

 

d = b * b - 4 * a * c

 

В зависимости от знака дискриминанта выводим ответ.

 

if d < 0:

  print("No roots")

elif d == 0:

  x1 = -b // (2 * a)

  print("One root:", x1)

else:

  x1 = int((-b - math.sqrt(d)) // (2 * a))

  x2 = int((-b + math.sqrt(d)) // (2 * a))

  print("Two roots:", min(x1, x2), max(x1, x2))